#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/time.h>

void doing(int arg)
{
    printf(" 我被捕捉了 \n");
}

int main(int argc, char **argv)
{
    int a = 0;

    // sigset_t myset, oldset;
    // sigemptyset(&myset);

    // sigaddset(&myset, SIGINT);
    // sigaddset(&myset, SIGQUIT);
    // sigaddset(&myset, SIGKILL);

    // sigprocmask(SIG_BLOCK, &myset, &oldset);

    signal(SIGALRM, &doing);

    // alarm(3);
    // alarm(6);
    // alarm(10);

    struct itimerval newact;
    // 3s之后发出第一个定时器信号, 之后每隔1s发出一个定时器信号
    newact.it_value.tv_sec = 3;
    newact.it_value.tv_usec = 0;
    newact.it_interval.tv_sec = 1;
    newact.it_interval.tv_usec = 0;
    // 这个函数也不是阻塞函数, 函数调用成功, 倒计时开始
    // 倒计时过程中程序是继续运行的
    setitimer(ITIMER_REAL, &newact, NULL);
    while (1)
    {
        sleep(1);
        ++a;
        if (a > 10)
            exit(0);
        printf(" 一直输出: %d \n", a);
    }

    return 0;
}